package model

import (
	"errors"
	"ip_server/db"
	"ip_server/logger"
)

// User 用户类
// 用于定义用户的基本信息和权限。
type User struct {
	Id           string `json:"user_id"`        // 用户唯一标识符
	Name         string `json:"name"`           // 用户的真实姓名
	UserName     string `json:"user_name"`      // 用户的用户名
	Password     string `json:"password"`       // 用户的密码
	IsAdmin      bool   `json:"is_admin"`       // 用户是否为管理员，1表示是，0表示否
	AccountExist bool   `json:"account_exist"`  // 用户账号是否存在，1表示存在，0表示不存在
	CountPerPage int    `json:"count_per_page"` // 每页显示的用户数量
}

func (u *User) tableName() string {
	return "user"
}

// LoginCheck 登录验证
func LoginCheck(username, pwd string) (bool, User, error) {
	resultUser := User{}
	resultUser.Name = username
	resultUser.Password = pwd
	if username == "test" && pwd == "123456" {
		return true, resultUser, nil
	}
	return false, resultUser, nil
}

// GetInfoByName 登录验证
func (u *User) GetInfoByName(username string) (uinfo User, err error) {
	if username == "" {
		logger.Error("username is null")
		return uinfo, errors.New("username is null")
	}
	logger.Error("---------------username is :", username)
	sqlStr := "select `user_id`,`name`,`username`,`password` from user where username='"+username+"'"
	err = db.DbWrapper.QueryRow(sqlStr).Scan(&uinfo.Id, &uinfo.Name, &uinfo.UserName, &uinfo.Password)
	logger.Error("---------------username is :", uinfo.Id)
	if err != nil {
		return uinfo, err
	}
	return uinfo, nil
}

// InfoNum 根据请求参数查询用户列表
func (u *User) InfoNum(id string) int {
	var count int
	//1、先查询
	sqlStr := "select count(*) from " + u.tableName() + " where user_id=?"
	err := db.DbWrapper.QueryRow(sqlStr, id).Scan(&count)
	if count <= 0 || err != nil {
		return 0
	}
	return count
}

// GetInfoByID  //通过ID获取信息
func (u *User) GetInfoByID(id string) (proTemp User, err error) {
	//1、先查询
	sqlStr := "select user_id, name , username, account_exist, is_admin" +
		" from " + u.tableName() + " where user_id =?"
	err = db.DbWrapper.QueryRow(sqlStr, id).Scan(&proTemp.Id, &proTemp.Name, &proTemp.UserName,
		&proTemp.AccountExist, &proTemp.IsAdmin)
	return proTemp, err
}
